package org.szy.plugin.dev.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import org.szy.core.common.page.QueryPage;
import org.szy.core.common.service.BaseService;
import org.szy.plugin.dev.entity.DevMessageUser;
import org.szy.plugin.dev.param.DevMessageUserQueryParam;

import java.util.List;
import java.util.Map;

/**
 * 站内消息用户关联Service接口
 *
 * @author wangbuhao
 * @since 2023-06-28 18:17:41
 **/
public interface DevMessageUserService extends BaseService<DevMessageUser> {

    /**
     * 获取站内消息用户关联查询Wrapper
     *
     * @author wangbuhao
     * @since 2023-06-28 18:17:41
     */
    QueryWrapper qwByQuery(DevMessageUserQueryParam param);

    /**
     * 获取站内消息用户关联分页
     *
     * @author wangbuhao
     * @since 2023-06-28 18:17:41
     */
    Page page(QueryPage page, DevMessageUserQueryParam param);

    /**
     * 删除站内消息用户关联
     *
     * @param id 消息标识
     * @return 操作结果
     */
    boolean removeByMessageId(Long id);

    /**
     * 是否有未读的消息
     *
     * @param receiverId 接收人标识
     * @return
     */
    long unRead(String receiverId);

    /**
     * 类型数量组
     *
     * @param messageStatus 消息状态
     * @return
     */
    List<Map> categoryCount(String messageStatus);

    /**
     * 用户删除自己的站内信
     *
     * @param id         站内信标识
     * @param receiverId 接收人
     * @return
     */
    boolean delete(Long id, Object receiverId);

    /**
     * 阅读站内信
     *
     * @param ids        站内信标识列表
     * @param receiverId 接收人
     * @return
     */
    boolean read(String ids, Object receiverId);
}
